package com.campus.utils;

import com.campus.common.StringUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

/**
 * @desc: 密码迁移工具类，用于将数据库中的明文密码加密
 * @author: hjm
 * @date: 2024/11/22
 */
public class PasswordMigration {

    public static void main(String[] args) {
        // 配置数据库连接
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/db_campsys");
        dataSource.setUsername("root");
        dataSource.setPassword("root");

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 查询所有用户
        String selectSql = "SELECT id, login_name, password FROM t_sys_user";
        String updateSql = "UPDATE t_sys_user SET password = ? WHERE id = ?";

        jdbcTemplate.query(selectSql, (rs, rowNum) -> {
            int userId = rs.getInt("id");
            String loginName = rs.getString("login_name");
            String currentPassword = rs.getString("password");

            // 如果当前密码不是加密的（假设没有盐值时很短），则进行加密
            if (currentPassword.length() < 32) {
                String salt = StringUtils.getSalt(loginName);
                String encryptedPassword = StringUtils.md5Encoder(currentPassword, salt);

                // 更新数据库中的密码
                jdbcTemplate.update(updateSql, encryptedPassword, userId);

                System.out.println("用户ID " + userId + " 密码已加密。");
            } else {
                System.out.println("用户ID " + userId + " 密码已加密。");
            }
            return null;
        });

        System.out.println("密码迁移完成。");
    }
}